﻿// ***********************************************************************
// Assembly         : Delta_entidad
// Author           : Juan Alberto Cerino Gomez
// Created          : 02-18-2013
//
// Last Modified By : Juan Alberto Cerino Gomez
// Last Modified On : 06-03-2013
// ***********************************************************************
// <copyright file="Cat_tipo_gral.cs" company="Delta Bussines">
//     Copyright (c) 2013  Delta Bussines. All rights reserved.
// </copyright>
// <summary></summary>
// ***********************************************************************
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using Delta_util.Estaticos;
using Delta_entidad.Base;
using Delta_entidad.Atributos;

namespace Delta_entidad.EntidadesControl
{
    /// <summary>
    /// Entidad que representa la configuración de una entidad, en esta configuración indicamos la tabla relacionada con la entidad, asi como tambien el tipo de tabla: Datos,Dinámica,Virtual.
    /// </summary>
    [Serializable]
    [AttEntidad("DG_Cat_tipo_gral", "id_tipo_gral", false, 0, true, true, Enumerados.TIPO_OPERACION_GRID.INSERTAR, Enumerados.TIPO_OPERACION_GRID.ACTUALIZAR, Enumerados.TIPO_OPERACION_GRID.ELIMINAR, Enumerados.TIPO_OPERACION_GRID.SELECCIONAR)]
    public class Cat_tipo_gral : TipoBase, ITipo
    {
        /// <summary>
        /// Constructor de la clase.
        /// </summary>
        public Cat_tipo_gral() {
            base.EsEntidadControl = true;
        }
        /// <summary>
        /// Variable que indica la clave del tipo general
        /// </summary>
        private int _id_tipo_gral;
        /// <summary>
        /// Variable que indica el nombre del tipo general.
        /// </summary>
        private string _nombre;
        /// <summary>
        /// Variable que indica el nombre de la tabla en la cual se guardarán los datos de la entidad.
        /// </summary>
        private string _tabla;
        /// <summary>
        /// Variable que indica el nombre del tipo de entidad.
        /// </summary>
        private string _tipoEntidad;
        /// <summary>
        /// Variable que indica si la tabla es general.
        /// </summary>
        private bool _es_general;
        /// <summary>
        /// Variable que indica la configuración dinámica configurada a la taba.
        /// </summary>
        private List<Cat_campo_tecnico> _campos;
        /// <summary>
        /// Variable que indica los campos que son lla
        /// </summary>
        private string _llaves_tabla;
        /// <summary>
        /// Variable que indica si el tipo maneja campos dinámicos.
        /// </summary>
        private bool _manejar_users;
        /// <summary>
        /// Variable que indica el numero de registros por página.
        /// </summary>
        private Int16 _registros_por_pag;


        /// <summary>
        /// Obtiene o establece la clave del tipo general.
        /// </summary>
        /// <value>Clave del tipo general.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR, Enumerados.TIPO_QUERY.OBTENER, Enumerados.TIPO_QUERY.ELIMINAR, Enumerados.TIPO_QUERY.OBTENER_TODOS)]
        [AttPropiedad("Clave", true, false, false, false, Enumerados.TIPO_EDITOR.TEXBOX, null, 1)]
        public int id_tipo_gral
        {
            get { return _id_tipo_gral; }
            set { _id_tipo_gral = value; }
        }
        /// <summary>
        /// Obtiene o establece el nombre del tipo general.
        /// </summary>
        /// <value>Nombre del tipo general.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Nombre", true, false, true, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre identificador de la configuración del tipo", 2)]
        public string nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }


        /// <summary>
        /// Obtiene o establece el nombre de la tabla en la cual se guardarán los datos de la entidad.
        /// </summary>
        /// <value>Nombre de la tabla enlazada.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Tabla", true, false, true, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre de la tabla a la que hace referencia la entidad, si la tabla es general, el nombre debe ser diferente a las<br/> tablas que se encuentran en la BD", 3)]
        public string tabla
        {
            get { return _tabla; }
            set { _tabla = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre completo del tipo de entidad.
        /// </summary>
        /// <value>Nombre completo del tipo entidad.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 200, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR, Enumerados.TIPO_QUERY.OBTENER, Enumerados.TIPO_QUERY.OBTENER_TODOS)]
        [AttPropiedad("Tipo entidad", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre completo del tipo de entidad a usar, dejar en blanco si es tabla general", 4)]
        public string tipoEntidad
        {
            get { return _tipoEntidad; }
            set { _tipoEntidad = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor que indica si la tabla es general.
        /// <br/>Una tabla general es aquella tabla que todas sus columnas son dinámicas, es decir, que no existe una tabla fisica, en la base de datos, de este tipo.
        /// <br/>Las tablas virtuales o de consulta, tambien son tablas generales.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 1, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Es general", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, "Indica si la tabla no se encuentra fisica en la BD", 5)]
        public bool es_general
        {
            get { return _es_general; }
            set { _es_general = value; }
        }

        /// <summary>
        /// Obtiene o establece la consulta que se usa para mostrar los datos de una tabla virtual o de consulta.
        /// <br/>Especificar valor solo cuando la tabla es virtual.
        /// </summary>
        /// <value>Consulta para obtener los datos.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Consulta", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre del procedimiento almacenado a ejecutar, ingrese dato solo si la tabla es de consulta", 6)]
        public string consulta
        {
            get;
            set;
        }

        /// <summary>
        /// Obtiene o establece el texto que contiene el nombre de aquellas columnas que son principales en la tabla.
        /// </summary>
        /// <value>Lista de columnas principales.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 50, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Columnas claves", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre de las columnas que son llaves primarias en la tabla, puede separarlas con coma(,)", 7)]
        public string llaves_tabla
        {
            get { return _llaves_tabla; }
            set { _llaves_tabla = value; }
        }
        /// <summary>
        /// Obtiene o establece el valor que indica si el tipo maneja campos dinámicos.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Manejar campos users", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, "Indica si la tabla maneja campos dinamicos", 8)]
        public bool manejar_users
        {
            get { return _manejar_users; }
            set { _manejar_users = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor que indica si se debe tomar la configuración indicada en la web (true), o se debe tomar la configurada en la entidad(false).
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Aplicar configuracion WEB", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, "Indica al Delta Grid y al Editor, si debe tomar la configuración de los atributos <br/>de la entidad o tomar la configuración web", 9)]
        public bool configuracion_web
        {
            get;
            set;
        }

        /// <summary>
        /// Obtiene o establece el número de registros que se muestran por página en el GridView.
        /// </summary>
        /// <value>Número de registros por página.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Registros por página", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, null, 10)]
        public Int16 registros_por_pag
        {
            get { return _registros_por_pag; }
            set { _registros_por_pag = value; }
        }

        /// <summary>
        /// Obtiene o establece el titulo que se muestra en el Delta Grid.
        /// </summary>
        /// <value>Titulo del Delta Grid.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 200, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Titulo", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, null, 12)]
        public string titulo
        {
            get;
            set;
        }

        /// <summary>
        /// Obtiene o establece el valor que indica si se debe guardar el listado del GridView en memoria o se debe obtener de la base de datos.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 1, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Guardar lista en cache", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 13)]
        public bool guardar_lista_en_cache
        {
            get;
            set;
        }

        /// <summary>
        /// Obtiene o establece el valor que indica si se debe actualizar la lista del GridView cada vez que se apliquen los filtros
        /// o tomar los guardados en la memoria, debe tomar en cuenta que si la propiedad "guardar_lista_en_cache" es false, entonces siempre se van a obtener la lista de la base de datos.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 1, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Actualizar al filtrar", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 14)]
        public bool actualizar_al_filtrar
        {
            get;
            set;
        }


        /// <summary>
        /// Obtiene o establece el valor que indica si se usa UpdatePanel en el editor de registros, se recomienda no usar UpdatePanel cuando algun campo de la entidad use un editor de tipo FileUpload, ya que este control no trabaja correctamente con el UpdatePanel.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 1, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Usar update panel en el editor", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 15)]
        public bool upanel_en_edicion
        {
            get;
            set;
        }


        /// <summary>
        /// Obtiene o establece la lista de configuración dinámica de los campos de este tipo.
        /// </summary>
        /// <value>Lista de campos.</value>
        public List<Cat_campo_tecnico> campos
        {

            get { return _campos; }
            set { _campos = value; }
        }

        /// <summary>
        /// Obtiene o establece el listado de operaciones permitida para este tipo en el Delta Grid.
        /// </summary>
        /// <value>Lista de operaciones.</value>
        public List<Operaciones_tipo> operaciones
        {

            get;
            set;
        }

    }
}